<?php
 
error_reporting(E_ALL & ~E_NOTICE);
$w = 100; //设置图片宽和高
$h = 31;
$str = Array(); //用来存储随机码
$string = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ";//随机挑选其中4个字符，也可以选择更多，注意循环的时候加上，宽度适当调整
for($i = 0;$i < 4;$i++){
   $str[$i] = $string[rand(0,35)];
   $vcode .= $str[$i];
}
session_start(); //启用超全局变量session
$_SESSION["vcode"] = $vcode;
$_SESSION['vcode_time']=time();	//验证码时间
$im = imagecreatetruecolor($w,$h);
$grey = imagecolorallocate($im, 128, 128, 128);
$white = imagecolorallocate($im,255,255,255); //第一次调用设置背景色
$black = imagecolorallocate($im,0,0,0); //边框颜色
imagefilledrectangle($im,0,0,$w,$h,$white); //画一矩形填充

//生成雪花背景
/* for($i = 1;$i < 200;$i++){ 
   $x = mt_rand(1,$w-9);
   $y = mt_rand(1,$h-9);
   $color = imagecolorallocate($im,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
   imagechar($im,1,$x,$y,"*",$color);
} */
//将验证码写入图案
for($i = 0;$i < count($str);$i++){
   $x = 10 + $i * ($w - 10)/4;
   $y = 2+mt_rand(3,$h / 3);
   $color = imagecolorallocate($im,0,0,200);
   $font_size=rand(18,24);	//字体大小
   $wing=rand(-50,50);	//旋转角度
   $font='fonts/BasicLatin.ttf';
   imagettftext($im, $font_size, $wing,$x,$h/2+$y, $color, $font, $str[$i]);
}

// 画干扰点   
for($i=0;$i<200;$i++){
	imagesetthickness ($im,rand(1,3));
	$font_color = imagecolorallocate($im, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));   
	imagesetpixel($im,mt_rand(0,$w),mt_rand(0,$h),$font_color);   
}
// 画干扰线   
for($i=0;$i<8;$i++){
	imagesetthickness ($im,rand(1,2));
	$font_color = imagecolorallocate($im, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));   
	imagearc($im,mt_rand(-$w,$w),mt_rand(-$h,$h),mt_rand(30,$w*2),mt_rand(20,$h*2),mt_rand(0,360),mt_rand(0,360),$font_color);   
}

imagesetthickness ($im,1);
//imagerectangle($im,0,0,$w-1,$h-1,imagecolorallocate($im, 222, 222, 222)); //画一矩形框
header("Content-type:image/jpeg"); //以jpeg格式输出，注意上面不能输出任何字符，否则出错
imagejpeg($im);
imagedestroy($im);
?>